package com.kaifamiao.exer;

/*
       判断一个数字是否是回文数
       1. 转字符串判断是否是回文字符串
       2. 根据数字判断
 */
public class Exercise01 {

    public static void main(String[] args) {

        int num = 1235321;
        System.out.println(isPalindromicNumber2(num));
    }


    /**
     * 判断数字是否是回文数字
     * @param num 要判断的数字
     * @return true 表示是回文数字, 否则不是
     *
     *  1. 将数字转换为字符串 String.valueOf(num)  num + ""
     *  2. 包装为 StringBuilder 或者 StringBuffer 对象 之后调用 reverse 方法， 判断前后是否一致
     *     或者 循环遍历每个字符 charAt(i)
     */
    public static boolean isPalindromicNumber(int num){
        String str = String.valueOf(num);

        // 转换为 StringBuilder
//        StringBuilder sb = new StringBuilder(str);
//
//        String reverse = sb.reverse().toString();
//
//        return str.equals(reverse);

        for (int i = 0; i < str.length() / 2; i ++){
            if (str.charAt(i) != str.charAt(str.length() - 1 - i)){
                return false;
            }
        }
        return true;
    }

    /**
     * 判断数字是否是回文数字
     * @param num 要判断的数字
     * @return true 表示是回文数字, 否则不是
     *
     *  1. 判断是否是 负数 以及 最后一位是否是 0
     *  2. 从后边的数开始每一位都获取到相加（从后往前读取）
     */
    public static boolean isPalindromicNumber2(int num){
        if (num < 0 || num % 10 == 0){
            return false;
        }

        int temp = 0;
        while (num > temp){

            // 取 num 的最后一位
            int last = num % 10;
            // 加起来
            temp = temp * 10 + last;

            if (temp == num){
                return true;
            }
            // 将 num 去掉最后一位
            num /= 10;
        }
        return num == temp;
    }
}
